package worker.model.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import worker.model.vo.HistoryVO;
import worker.model.vo.ItemInfoVO;
import worker.model.vo.OperationsVO;
import worker.model.vo.WorkOrdersVO;

import com.ibatis.sqlmap.client.SqlMapClient;

public class WorkOrderDao {
	private SqlMapClient sqlMapClient;

	public void setSqlMapClient(SqlMapClient sqlMapClient) {
		this.sqlMapClient = sqlMapClient;
	}
	/**
	 * 오늘의 날짜 get from dual
	 */
	public String getDatebyDaulTable() throws SQLException {
		return (String)this.sqlMapClient.queryForObject("workorder.getDatebyDaulTable");
	}
	/**
	 * 마지막 workorder get
	 */
	public WorkOrdersVO getLastWorkOrderInfo() throws SQLException {
		return (WorkOrdersVO)this.sqlMapClient.queryForObject("workorder.getLastWorkOrderInfo");
	}
	/**
	 * workorder 등록 
	 */
	public void setWorkOrderInfo(WorkOrdersVO woVO) throws SQLException {
		this.sqlMapClient.insert("workorder.setWorkOrderInfo", woVO);	
	}
	/**
	 * workorder를 history에 등록
	 */
	public void setHistorybyWorkOrderInfo(HistoryVO hisVO) throws SQLException {
		this.sqlMapClient.insert("workorder.setHistorybyWorkOrderInfo",hisVO);
	}
	/**
	 * 
	 */
	public OperationsVO getOperationsVO() throws SQLException {
		return (OperationsVO) this.sqlMapClient.queryForList("workorder.getOperations");
	}
	/**
	 * WO의 총 주문수량 - 아영
	 */
	public int getTotalQtyByWO(String wO) throws SQLException {
		return (Integer)sqlMapClient.queryForObject("workorder.getTotalQtyByWO",wO);
	}
	/**
	 * 공정이 시작되는 번호 값을 가져 온다. serial_start_no -아영
	 */
	public int getSerialStartNoByWO(String wO) throws SQLException {
		return (Integer)sqlMapClient.queryForObject("workorder.getSerialMinMaxNoByWO",wO);
	}
	/**
	 * WO에 의한 serial_no의 start와 max를 구한다. - 아영
	 */
	public ArrayList<HashMap> getSerialStartMaxNoByWO(String wO) throws SQLException {
		return (ArrayList<HashMap>)sqlMapClient.queryForList("workorder.getSerialStartMaxNoByWO",wO);
	}
	/**
	 * 원래의 원하던 주문량보다 공정하는 주분량이 더 작을경우
	 * 다음 공정을 위해 start_no를 최신것으로 update 해주기 - 아영
	 */
	public void updateSerialStartNo(WorkOrdersVO vo) throws SQLException {
		sqlMapClient.update("workorder.updateSerialStartNo",vo);		
	}
	/**
	 * 수행 해야 하는 workorderlist get - 아영
	 */
	public ArrayList<HashMap> getWorkOrderList() throws SQLException {
		return (ArrayList<HashMap>) sqlMapClient.queryForList("workorder.getWorkOrderList");
	}
	/**
	 * workorder에서 생산해야하는 수량 - 아영
	 */
	public int getWoQty(String wo) throws SQLException {
		return (Integer)sqlMapClient.queryForObject("workorder.getWoQty",wo);
	}
	/**
	 * workorder update : complete, serial_no_start
	 */
	public void updateWorkOrder(WorkOrdersVO vo) throws SQLException {
		sqlMapClient.update("workorder.updateWorkOrder",vo);		
	}
	/**
	 * workorder list - paging
	 * @throws SQLException 
	 */
	public ArrayList<Map>  getAllWorkOrderList(String page) throws SQLException {
		return (ArrayList<Map>) this.sqlMapClient.queryForList("workorder.getAllWorkOrderList",page);
	}
	public int getWorkOrderSize() throws SQLException {
		return (Integer) this.sqlMapClient.queryForObject("workorder.getWorkOrderSize");
	}
	public ArrayList<ItemInfoVO> getItemList() throws SQLException {
		return (ArrayList<ItemInfoVO> ) this.sqlMapClient.queryForList("workorder.getItemList");
	}

	
}
